{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fbace41b",
   "metadata": {},
   "source": [
    "# 数据\n",
    "## 2.1数据类型\n",
    "通常，数据集可以看作数据对象的集合。数据对象有时也叫做记录、点、向量、模式、事件、案例、样本、观测或实体。数据对象用一组刻画对象基本特性(如物体质量或事件发生时间)的属性描述。属性有时也叫做变量、特性、字段、特征或维。\n",
    "### 2.1.1 属性与维度\n",
    "1.什么是属性\n",
    "我们先更详细地定义属性。\n",
    "定义2.1属性(attribute)是对象的性质或特性，它因对象而异，或随时间而变化。\n",
    "\n",
    "例如，眼球颜色因人而异，而物体的温度随时间而变。注意：眼球颜色是一种符号属性，具有少量可能的值{棕色，黑色，蓝色，绿色，淡褐色，……},而温度是数值属性，可以取无穷多个值。追根溯源，属性并非数字或符号。然而，为了讨论和精细地分析对象的特性，我们为它们赋予了数字或符号。为了用一种明确定义的方式做到这一点，我们需要测量标度。\n",
    "\n",
    "定义2.2测量标度(measurement scale)是将数值或符号值与对象的属性相关联的规则(函数)。\n",
    "形式上，测量过程是使用测量标度将一个值与一个特定对象的特定属性相关联。这看上去有点抽象，但是任何时候，我们总在进行这样的测量过程。例如，踏上浴室的磅秤称体重；将人分为男女；清点会议室的椅子数目，确定是否能够为所有与会者提供足够的座位。在所有这些情况下，对象属性的“物理值”都被映射到数值或符号值。\n",
    "\n",
    "2.属性类型\n",
    "从前面的讨论显而易见，属性的性质不必与用来度量它的值的性质相同。换句话说，用来代表属性的值可能具有不同于属性本身的性质，并且反之亦然。我们用两个例子解释。\n",
    "\n",
    "3.属性的不同类型\n",
    "一种指定属性类型的有用(和简单)的办法是，确定对应于属性基本性质的数值的性质。例如，长度的属性可以有数值的许多性质。按照长度比较对象，确定对象的排序，以及谈论长度的差和比例都是有意义的。数值的如下性质(操作)常常用来描述属性。\n",
    "(1)相异性=和≠。\n",
    "(2)序<、≤、>和≥。\n",
    "(3)加法+和-。\n",
    "(4)乘法*和/。\n",
    "给定这些性质，我们可以定义四种属性类型：标称(nominal)、序数(ordinal)、区间(interval)和比率(ratio)。表2-2给出这些类型的定义，以及每种类型上有哪些合法的统计操作等信息。每种属性类型拥有其上方属性类型上的所有性质和操作。因此，对于标称、序数和区间属性合法的任何性质或操作，对于比率属性也合法。换句话说，属性类型的定义是累积的。当然，对于某种属性类型合适的操作，对其上方的属性类型就不一定合适。\n",
    "\n",
    "4.用值的个数描述属性\n",
    "区分属性的一种独立方法是根据属性可能取值的个数来判断。\n",
    "\n",
    "5.非对称的属性\n",
    "对于非对称的属性(asymmetricattibute),出现非零属性值才是重要的。考虑这样一个数据集，其中每个对象是一个学生，而每个属性记录学生是否选修大学的某个课程。对于某个学生，如果他选修了对应于某属性的课程，该属性取值1,否则取值0。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ede42e7",
   "metadata": {},
   "source": [
    "### 2.1.2数据集的类型\n",
    "1.数据集的一般特性\n",
    "在提供特定类型数据集的细节之前，我们先讨论适用于许多数据集的三个特性，它们对数据挖掘技术具有重要影响，它们是维度、稀疏性和分辨率。\n",
    "### 稀疏性(sparsity)\n",
    "有些数据集，如具有非对称特征的数据集，一个对象的大部分属性上的值都为0;在许多情况下，非零项还不到1%。实际上，稀疏性是一个优点，因为只有非零值才需要存储和处理。这将节省大量的计算时间和存储空间。此外，有些数据挖掘算法仅适合处理稀疏数据。\n",
    "### 分辨率(resolution)\n",
    "常常可以在不同的分辨率下得到数据，并且在不同的分辨率下数据的性质也不同。例如，在几米的分辨率下，地球表面看上去很不平坦，但在数十公里的分辨率下却相对平坦。数据的模式也依赖于分辨率。如果分辨率太高，模式可能看不出，或者掩埋在噪声中；如果分辨率太低，模式可能不出现。例如，几小时记录一下气压变化可以反映出风暴等天气系统的移动；而在月的标度下，这些现象就检测不到。\n",
    "\n",
    "2.记录数据\n",
    "许多数据挖掘任务都假定数据集是记录(数据对象)的汇集，每个记录包含固定的数据字段(属性)集。\n",
    "\n",
    "3.基于图形的数据\n",
    "有时，图形可以方便而有效地表示数据。我们考虑两种特殊情况：(1)图形捕获数据对象之\n",
    "间的联系，(2)数据对象本身用图形表示。\n",
    "带有对象之间联系的数据对象之间的联系常常携带重要信息。\n",
    "\n",
    "4.有序数据\n",
    "时序数据 时序数据(sequential data)也称时间数据(temporaldata),可以看作记录数据的扩充，其中每个记录包含一个与之相关联的时间。\n",
    "5.处理非记录数据\n",
    "\n",
    "大部分数据挖掘算法都是为记录数据或其变体(如事务数据和数据矩阵)设计的。通过从数据对象中提取特征，并使用这些特征创建对应于每个对象的记录，针对记录数据的技术也可以用于非记录数据。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20be7daf",
   "metadata": {},
   "source": [
    "## 2.2 数据质量\n",
    "### 2.2.1 数据测量和收集问题\n",
    "1.测量误差和数据收集错误\n",
    "\n",
    "术语测量误差(measurement error)是指测量过程中导致的问题。一个常见的问题是：在某种程度上，记录的值与实际值不同。对于连续属性，测量值与实际值的差称为误差(error)。术语数据收集错误(data collectionerror)是指诸如遗漏数据对象或属性值，或不当地包含了其他数据对象等错误。\n",
    "\n",
    "2.噪声和伪像\n",
    "\n",
    "噪声是测量误差的随机部分。这可能涉及值被扭曲或加入了谬误对象。图2-5显示被随机噪声干扰前后的时间序列。如果在时间序列上添加更多的噪声，形状将会消失。图2-6显示了三组添加一些噪声点(用“+”表示)前后的数据点集。注意，有些噪声点与非噪声点混在一起。\n",
    "(a)时间序列\n",
    "(b)含噪声的时间序列\n",
    "\n",
    "3.精度、偏倚和准确率\n",
    "\n",
    "在统计学和实验科学中，测量过程和结果数据的质量用精度和偏倚度量。我们给出标准的定义，随后简略加以讨论。对于下面的定义，我们假定对相同的基本量进行重复测量，并使用测量值集合计算均值(平均值),作为实际值的估计。\n",
    "\n",
    "4.离群点\n",
    "\n",
    "离群点(outlier)是在某种意义上具有不同于数据集中其他大部分数据对象的特征的数据对象，或是相对于该属性的典型值来说不寻常的属性值。我们也称其为异常(anomalous)对象或异常值。\n",
    "\n",
    "5.遗漏值\n",
    "\n",
    "一个对象遗漏一个或多个属性值的情况并不少见。有时可能会出现信息收集不全的情况，例如有的人拒绝透露年龄或体重。\n",
    "\n",
    "6.不一致的值\n",
    "\n",
    "数据可能包含不一致的值。比如地址字段列出了邮政编码和城市名，但是有的邮政编码区域并不包含在对应的城市中。可能是人工输入该信息时录颠倒了两个数字，或许是在手写体扫描时错读了一个数字。无论导致不一致值的原因是什么,重要的是能检测出来，并且如果可能的话，纠正这种错误。\n",
    "\n",
    "7.重复数据\n",
    "\n",
    "数据集可能包含重复或几乎重复的数据对象。许多人都收到过重复的邮件，因为他们以稍微不相同的名字多次出现在数据库中。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af1485fd",
   "metadata": {},
   "source": [
    "### 2.2.2关于应用的问题\n",
    "时效性\n",
    "\n",
    "有些数据收集后就开始老化。比如说，如果数据提供正在发生的现象或过程的快照，如顾客的购买行为或Web浏览模式，则快照只代表有限时间内的真实情况。如果数据已经过时，则基于它的模型和模式也已经过时。\n",
    "\n",
    "相关性 \n",
    "\n",
    "可用的数据必须包含应用所需要的信息。考虑构造一个模型，预测交通事故发生率。如果忽略了驾驶员的年龄和性别信息，那么除非这些信息可以间接地通过其他属性得到，否则模型的精度可能是有限的。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8791a99",
   "metadata": {},
   "source": [
    "## 2.3数据预处理 \n",
    "### 2.3.1聚集\n",
    "有时，“少就是多”,而聚集就是如此。聚集(aggregation)将两个或多个对象合并成单个对象。\n",
    "### 2.3.2 抽样\n",
    "1.抽样方法\n",
    "\n",
    "有许多抽样技术，但是这里只介绍少数最基本的抽样技术和它们的变形。最简单的抽样是简单随机抽样(simple random sampling)。对于这种抽样，选取任何特定项的概率相等。随机抽样有两种变形(其他抽样技术也一样):(1)无放回抽样——每个选中项立即从构成总体的所有对象集中删除；(2)有放回抽样——对象被选中时不从总体中删除。在有放回抽样中，相同的对象可能被多次抽出。当样本与数据集相比相对较小时，两种方法产生的样本差别不大。但是，对于分析，有放回抽样较为简单，因为在抽样过程中，每个对象被选中的概率保持不变。\n",
    "\n",
    "当总体由不同类型的对象组成，每种类型的对象数量差别很大时，简单随机抽样不能充分地代表不太频繁出现的对象类型。当分析需要所有类型的代表时，这可能出现问题。例如，当为稀有类构建分类模型时，样本中适当地提供稀有类是至关重要的，因此需要提供具有不同频率的感兴趣的项的抽样方案。分层抽样(stratified sampling)就是这样的方法，它从预先指定的组开始抽样。在最简单的情况下，尽管每组的大小不同，但是从每组抽取的对象个数相同。另一种变形是从每一组抽取的对象数量正比于该组的大小。\n",
    "\n",
    "2.渐进抽样\n",
    "\n",
    "合适的样本容量可能很难确定，因此有时需要使用自适应(adaptive)或渐进抽样(progre-ssive sampling)方法。这些方法从一个小样本开始，然后增加样本容量直至得到足够容量的样本。尽管这种技术不需要在开始就确定正确的样本容量，但是需要评估样本的方法，确定它是否足够大。\n",
    "\n",
    "### 2.3.3维归约\n",
    "\n",
    "数据集可能包含大量特征。考虑一个文档的集合，其中每个文档是一个向量，其分量是文档中出现的每个词的频率。在这种情况下，通常有成千上万的属性(分量),每个代表词汇表中的一个词。\n",
    "\n",
    "1.维灾难\n",
    "\n",
    "维灾难是指这样的现象：随着数据维度的增加，许多数据分析变得非常困难。特别是随着维度增加，数据在它所占据的空间中越来越稀疏。\n",
    "\n",
    "2.维归约的线性代数技术\n",
    "\n",
    "维归约的一些最常用的方法是使用线性代数技术，将数据由高维空间投影到低维空间，特别是对于连续数据。\n",
    "\n",
    "### 2.3.4特征子集选择\n",
    "\n",
    "1.特征子集选择体系结构\n",
    "\n",
    "可以将过滤和包装方法放到一个共同的体系结构中。特征选择过程可以看作由四部分组成：子集评估度量、控制新的特征子集产生的搜索策略、停止搜索判断和验证过程。\n",
    "2.特征加权\n",
    "\n",
    "特征加权是另一种保留或删除特征的办法。特征越重要，所赋予的权值越大，而不太重要的特征赋予较小的权值。有时，这些权值可以根据特征的相对重要性的领域知识确定，也可以自动确定。\n",
    "\n",
    "### 2.3.5特征创建\n",
    "\n",
    "1.特征提取\n",
    "由原始数据创建新的特征集称作特征提取(feature extraction)。考虑照片的集合，按照照片是否包含人脸分类。原始数据是像素的集合，因此对于许多分类算法都不适合。\n",
    "\n",
    "2.映射数据到新的空间\n",
    "\n",
    "使用一种完全不同的视角挖掘数据可能揭示出重要和有趣的特征。\n",
    "\n",
    "3.特征构造\n",
    "\n",
    "有时，原始数据集的特征具有必要的信息，但其形式不适合数据挖掘算法。在这种情况下，一个或多个由原特征构造的新特征可能比原特征更有用。\n",
    "\n",
    "### 2.3.6离散化和二元化\n",
    "\n",
    "1.二元化\n",
    "\n",
    "一种分类属性二元化的简单技术如下：如果有m个分类值，则将每个原始值唯一地赋予区\n",
    "间[0,m-1]中的一个整数。如果属性是有序的，则赋值必须保持序关系。\n",
    "\n",
    "2.连续属性离散化\n",
    "\n",
    "通常，离散化应用于在分类或关联分析中使用到的属性上。一般来说，离散化的效果取决于所使用的算法，以及用到的其他属性。然而，属性离散化通常单独考虑。连续属性变换成分类属性涉及两个子任务：决定需要多少个分类值，以及确定如何将连续属性值映射到这些分类值。在第一步中，将连续属性值排序后，通过指定n-1个分割点(split point)把它们分成n个区间。在颇为平凡的第二步中，将一个区间中的所有值映射到相同的分类值。\n",
    "\n",
    "3.具有过多值的分类属性\n",
    "\n",
    "分类属性有时可能具有过多的值。如果分类属性是序数属性，则可以使用类似于处理连续属性的技术，以减少分类值的个数。然而，如果分类属性是标称的，就需要使用其他方法。\n",
    "### 2.3.7变量变换\n",
    "\n",
    "1.简单函数\n",
    "\n",
    "对于这种类型的变量变换，一个简单数学函数分别作用于每一个值。如果x是变量，这种变换的例子包括x,log x,e,√x,1/x,sinx和|x|。\n",
    "\n",
    "2.规范化或标准化\n",
    "\n",
    "另一种常见的变量变换类型是变量的标准化(standardization)或规范化(normalization)。在数据挖掘界，这两个术语常常可互换，然而，在统计学中，术语规范化可能与使变量正态(高斯)的变换相混淆。标准化或规范化的目标是使整个值的集合具有特定的性质。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b373d091",
   "metadata": {},
   "source": [
    "## 2.4相似性和相异性的度量\n",
    "### 2.4.1基础\n",
    "1.定义\n",
    "\n",
    "两个对象之间的相似度(similarity)的非正式定义是这两个对象相似程度的数值度量。因而，两个对象越相似，它们的相似度就越高。通常，相似度是非负的，并常常在0(不相似)和1(完全相似)之间取值。\n",
    "\n",
    "2.变换\n",
    "\n",
    "通常使用变换把相似度转换成相异度或相反，或者把邻近度变换到一个特定区间，如[0,1]。\n",
    "### 2.4.2简单属性之间的相似度和相异度\n",
    "\n",
    "通常，具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义，因此我们首先讨论具有单个属性的对象之间的邻近度。\n",
    "### 2.4.3数据对象之间的相异度\n",
    "\n",
    "我们首先给出一些例子，然后使用距离的常见性质更正式地介绍距离。一维、二维、三维或高维空间中两个点x和y之间的欧几里得距离(Euclidean distance)d由如下熟悉的公式定义\n",
    "### 2.4.4数据对象之间的相似度\n",
    "\n",
    "对于相似度，三角不等式(或类似的性质)通常不成立，但是对称性和非负性通常成立。更明确地说，如果s(x,y)是数据点x和y之间的相似度，则相似度具有如下典型性质。\n",
    "(1)仅当x=y时s(x,y)=1。(O≤s≤1)\n",
    "(2)对于所有x和y,s(x,y)=s(y,x)。(对称性)\n",
    "### 2.4.5邻近性度量的例子\n",
    "\n",
    "1.二元数据的相似性度量\n",
    "\n",
    "两个仅包含二元属性的对象之间的相似性度量也称为相似系数(similarity coefficient),并且通常在0和1之间取值，值为1表明两个对象完全相似，而值为0表明对象一点也不相似。有许多理由表明在特定情形下，一种系数为何比另一种好。\n",
    "\n",
    "2.余弦相似度\n",
    "\n",
    "通常，文档用向量表示，向量的每个属性代表一个特定的词(术语)在文档中出现的频率。当然，实际情况要复杂得多，因为需要忽略常用词，并使用各种技术处理同一个词的不同形式、不同的文档长度以及不同的词频。\n",
    "3.广义Jaccard系数(Tanimoto系数)\n",
    "\n",
    "广义Jaccard系数可以用于文档数据，并在二元属性情况下归约为Jaccard系数。广义Jaccard系数又称Tanimoto系数。(然而，还有一种系数也称Tanimoto系数。)该系数用EJ表示\n",
    "4.相关性\n",
    "\n",
    "两个具有二元变量或连续变量的数据对象之间的相关性是对象属性之间线性联系的度量。\n",
    "### 2.4.6邻近度计算问题\n",
    "\n",
    "1.距离度量的标准化和相关性\n",
    "\n",
    "距离度量的一个重要问题是当属性具有不同的值域时如何处理。(这种情况通常称作“变量具有不同的尺度。”)前面，使用欧几里得距离，基于年龄和收入两个属性来度量人之间的距离。除非这两个属性是标准化的，否则两个人之间的距离将被收入所左右。\n",
    "\n",
    "一个相关的问题是，除值域不同外，当某些属性之间还相关时，如何计算距离。当属性相关、具有不同的值域(不同的方差)、并且数据分布近似于高斯(正态)分布时，欧几里得距离的拓广，Mahalanobis距离是有用的。\n",
    "\n",
    "2.组合异种属性的相似度\n",
    "\n",
    "前面的相似度定义所基于的方法都假定所有属性具有相同类型。当属性具有不同类型时，就需要更一般的方法。\n",
    "\n",
    "3.使用权值\n",
    "\n",
    "在前面的大部分讨论中，所有的属性在计算邻近度时都会被同等对待。但是，当某些属性对邻近度的定义比其他属性更重要时，我们并不希望这种同等对待的方式。\n",
    "### 2.4.7选取正确的邻近性度量\n",
    "\n",
    "下面是一些一般观察，可能会对你有所帮助。首先，邻近性度量的类型应当与数据类型相适应。对于许多稠密的、连续的数据，通常使用距离度量，如欧几里得距离等。连续属性之间的邻近度通常用属性值的差来表示，并且距离度量提供了一种将这些差组合到总邻近性度量的良好方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1269cca6",
   "metadata": {},
   "source": [
    "### 8.讨论：为什么文档-词矩阵是具有非对称的离散特征或非对称的连续特征的数据集的例子?\n",
    "\n",
    "答：\n",
    "\n",
    "### 非对称离散特征\n",
    "\n",
    "• 从稀疏性角度：文档 - 词矩阵是一个稀疏矩阵。大部分词不会出现在所有文档中。例如，在一个包含1000篇文档和10000个词汇的文档 - 词矩阵中，对于某个生僻词汇可能仅在少数几篇文档中出现，而其余大部分文档该词的词频为0。这种离散特征（词频）的分布是不对称的，因为不同词汇在文档间的出现情况差异巨大。\n",
    "\n",
    "• 从词汇重要性角度：在数据挖掘的文本分类任务中，某些词汇对特定类别的文档有很强的指示性。例如在医学文献分类中，专业医学词汇如“基因编辑”可能在医学研究论文中频繁出现（词频较高），但在非医学类文档如文学作品中几乎不出现。这体现了离散词频特征在不同类型文档之间的不对称性，这种不对称性可以帮助挖掘文档的类别特征。\n",
    "\n",
    "### 非对称连续特征\n",
    "\n",
    "• 以TF - IDF为例：TF - IDF（词频 - 逆文档频率）是文档 - 词矩阵中常用的连续特征度量。TF部分计算词汇在单篇文档中的频率，不同文档的长度不同，同一词汇在长文档中的TF可能高于短文档。IDF部分衡量词汇在整个文档集合中的稀有程度。例如，一个特定领域的专业词汇在该领域文档集合中的IDF值高，但在其他领域文档集合中的IDF值低。所以对于不同文档，同一词汇的TF - IDF值不同，呈现不对称的连续特征。这种不对称性有助于在数据挖掘的文本聚类和分类任务中，更好地区分不同主题的文档，因为TF - IDF值能够突出显示那些对特定文档主题有重要意义的词汇。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cff9a4b",
   "metadata": {},
   "source": [
    "### 10.讨论测量精度与术语单精度和双精度之间的差别。单精度和双精度用在计算机科学，通常分别表示32位和64位浮点数。\n",
    "\n",
    "\n",
    "### 测量精度\n",
    "\n",
    "• 测量精度是指测量结果与真实值之间的接近程度。在数据挖掘中，当处理数据时，比如从传感器收集的数据或者用户行为数据等，测量精度决定了数据质量。高精度的数据能更好地反映实际情况，有助于挖掘出更准确的模式。例如，在分析气象数据挖掘时，如果温度传感器的测量精度高，得到的数据就能更精准地用于预测天气模式。\n",
    "\n",
    "• 测量精度还受到数据收集方法、工具以及数据噪声等因素的影响。低精度的数据可能会引入偏差，导致挖掘出错误的关联规则或者分类模型不准确。比如在市场调查数据挖掘中，如果问卷设计的问题测量精度低（例如选项划分太粗糙），那么分析消费者偏好时就容易得出不准确的结论。\n",
    "\n",
    "### 单精度（32位浮点数）\n",
    "\n",
    "• 单精度是计算机存储浮点数的一种格式，它在数据挖掘中有自己的特点。单精度的存储空间有限，只有32位，其中一部分用于表示指数，一部分用于表示尾数。这就导致它的表示范围和精度是有限的。在处理大规模数据挖掘任务时，使用单精度可以节省存储空间。例如，在处理海量的网页文本数据进行文本挖掘时，如果对数据的精度要求不是特别高（如简单的词频统计），单精度可以快速存储和处理数据。\n",
    "\n",
    "• 然而，单精度由于其精度有限，可能会导致数据舍入误差。在一些对精度要求较高的数据挖掘算法中，如某些复杂的机器学习算法进行数值计算时，单精度可能会产生累积误差，影响模型的准确性。例如在进行深度神经网络的训练时，如果使用单精度存储权重和梯度，可能会因为舍入误差导致模型收敛变慢或者无法收敛到最优解。\n",
    "\n",
    "### 双精度（64位浮点数）\n",
    "\n",
    "• 双精度提供了更高的精度，它有64位存储空间。在需要高精度计算的数据挖掘场景中非常有用。例如在金融数据挖掘中，对于股票价格的精确计算、风险评估等，双精度能够更准确地表示数据，减少舍入误差。因为金融数据的微小变化可能会产生巨大的经济影响，所以高精度的数据表示是很重要的。\n",
    "\n",
    "• 双精度虽然精度高，但它也有缺点。双精度占用的存储空间是单精度的两倍，在处理海量数据时，存储和处理双精度数据会消耗更多的资源，包括内存和计算时间。例如在处理大规模的图像数据挖掘任务时，如果全部使用双精度存储图像的像素值等数据，可能会导致内存不足或者计算速度过慢。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c02fb92a",
   "metadata": {},
   "source": [
    "### 12.区别噪声和离群点。确保考虑以下问题。\n",
    "(a)噪声曾令人感兴趣或使人期望吗?离群点呢?\n",
    "(b)噪声对象可能是离群点吗?\n",
    "(c)噪声对象总是离群点吗?\n",
    "(d)离群点总是噪声对象吗?\n",
    "(e)噪声能将典型值变成例外值吗?反之呢?\n",
    "\n",
    "\n",
    "答：\n",
    "### 2. (a)是否令人感兴趣或期望\n",
    "\n",
    "• 噪声：一般来说，噪声是不令人感兴趣的，并且是不期望出现的。它会干扰数据挖掘算法对数据真实模式的发现。例如，在分析客户购买行为数据时，由于系统故障导致的一些错误的购买记录（如价格记录错误）就是噪声，这些数据会影响对客户真实购买能力和偏好的分析。\n",
    "\n",
    "• 离群点：离群点可能是令人感兴趣的。在某些情况下，离群点可能代表了特殊的情况或者新的模式。比如在信用卡欺诈检测中，离群点（异常的消费记录）可能就是欺诈行为的信号，是数据挖掘重点关注的对象。\n",
    "\n",
    "### 3. (b)噪声对象可能是离群点吗？\n",
    "\n",
    "• 是的，噪声对象可能是离群点。因为噪声导致的数据点可能会与正常的数据分布明显不同。例如，在一个记录学生考试成绩的数据集里，由于数据录入错误，某个学生的成绩被错误地记录为一个远超正常范围的值，这个错误的数据点（噪声）同时也是一个离群点。\n",
    "\n",
    "### 4. (c)噪声对象总是离群点吗？\n",
    "\n",
    "• 不是。有些噪声可能不会导致数据点成为离群点。例如，在一个气温数据集里，由于传感器的小误差，数据点的值有轻微的波动，但这个波动没有使数据点偏离整体数据的分布范围，那么这些噪声数据就不是离群点。\n",
    "\n",
    "### 5. (d)离群点总是噪声对象吗？\n",
    "\n",
    "• 不是。离群点可能是真实的数据，代表了数据中的特殊情况。例如，在分析运动员比赛成绩时，个别运动员因为天赋或者特殊训练方法取得了远超其他运动员的成绩，这个数据点是离群点，但不是噪声，而是真实反映了一种特殊情况。\n",
    "\n",
    "### 6. (e)噪声能将典型值变成例外值吗？反之呢？\n",
    "\n",
    "• 噪声能将典型值变成例外值：是的，如前面所举的学生考试成绩录入错误的例子，原本正常的成绩因为噪声变成了离群点（例外值）。\n",
    "\n",
    "• 例外值能变成典型值吗（反之）：一般情况下，例外值（非噪声导致的离群点）很难变成典型值，因为它本身代表的是特殊情况。但如果数据的分布发生了变化，例如在市场趋势变化的情况下，原来的一些离群点（如某些小众产品的销售数据）可能会随着市场变化成为新的典型值。不过，如果是噪声导致的例外值，在纠正噪声后，数据点会恢复到正常范围，不会改变典型值的定义。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "92bab33a",
   "metadata": {},
   "source": [
    "### 16.考虑一个文档-词矩阵，其中f是第i个词(术语)出现在第j个文档中的频率，而m是文档数。考虑由下式定义的变量变换：\n",
    "6=n,log\"\n",
    "其中，dji是出现第i个词的文档数，称作词的文档频率(document frequency)。该变换称作逆文档频率(inverse document frequency)变换。\n",
    "(a)如果词出现在一个文档中，该变换的结果是什么?如果术语出现在每个文档中呢?\n",
    "(b)该变换的目的可能是什么?\n",
    "\n",
    "答：\n",
    "### (a)不同出现情况的变换结果\n",
    "\n",
    "• 词出现在一个文档中：\n",
    "在数据挖掘里，文档 - 词矩阵常用来表示文本数据特征。当一个词只出现在一个文档中（即d_{ji}=1），从信息论角度看，它对于区分这一文档和其他文档可能具有较高价值。代入逆文档频率变换公式t_{ji}=n_{ji}\\log\\frac{m}{d_{ji}}，可得t_{ji}=n_{ji}\\log m。这意味着该词在这个文档中的频率n_{ji}会被放大（乘以\\log m），因为它相对比较“独特”，出现在很少的文档中，通过这样的变换，后续在文本挖掘任务（比如文本分类或聚类）中能更凸显其对特定文档的代表性作用。\n",
    "\n",
    "• 词出现在每个文档中：\n",
    "当某个词出现在所有文档（即d_{ji}=m）时，依据公式t_{ji}=n_{ji}\\log\\frac{m}{d_{ji}}，计算可得t_{ji}=n_{ji}\\log\\frac{m}{m}=n_{ji}\\log1 = 0。在数据挖掘场景中，像“的”“是”这类停用词往往会出现在几乎所有文档里，它们对区分不同文档主题没太大帮助，通过逆文档频率变换使其权重变为0，这样在后续基于文档 - 词矩阵进行文本挖掘操作（如构建文本分类模型、进行文本相似度计算等）时，就可以减少这类通用词的干扰，聚焦于更有区分度的词汇。\n",
    "\n",
    "### (b)变换的目的\n",
    "\n",
    "• 提升特征区分能力：在数据挖掘的文本相关任务中，目标之一是找到能有效区分不同文档的特征词汇。逆文档频率变换能够根据词在文档集合中的出现频率情况来调整其权重。对于那些只在少数文档中出现的词，它们往往更能体现特定文档的独特内容或者主题，变换后权重会提高，有助于在文本分类中更准确地把不同主题的文档区分开来，或者在文本聚类中让主题相似的文档更紧密地聚合在一起。\n",
    "\n",
    "• 优化数据表示：从数据挖掘的数据预处理角度，原始的文档 - 词矩阵单纯基于词频等方式来体现词汇在文档中的情况可能不够精准。通过引入逆文档频率变换，对词的权重进行重新评估和调整，能让整个文档 - 词矩阵所代表的数据特征更符合挖掘任务的需求，减少无用信息（如常见词的干扰），强化有用信息（有区分度词的作用），从而为后续应用如基于机器学习的文本分类算法、文本关联规则挖掘等提供更优质的数据基础，提升挖掘结果的准确性和有效性。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a71813cc",
   "metadata": {},
   "source": [
    "### 24.通常，邻近度定义在一对对象之间。\n",
    "(a)阐述两种定义一组对象之间邻近度的方法。\n",
    "(b)如何定义欧几里得空间中两个点集之间的距离?\n",
    "(c)如何定义两个数据对象集之间的邻近度?(除邻近度定义在任意一对对象之间外，对数据对象不做任何假定。)\n",
    "\n",
    "答：\n",
    "### (a)定义一组对象之间邻近度的两种方法\n",
    "\n",
    "• 基于中心点的方法\n",
    "\n",
    "• 在数据挖掘中，对于一组对象，可以先计算它们的中心（如均值点）。例如，在一个二维空间中有一组数据点代表客户的位置，先计算这些点的重心（横坐标平均值和纵坐标平均值构成的点）。然后通过计算每个对象到这个中心的距离来衡量邻近度。距离中心较近的对象被认为具有较高的邻近度。这种方法适用于数据呈团状分布的情况，比如在聚类分析的预处理阶段，帮助初步判断数据点是否可能属于同一个聚类。\n",
    "\n",
    "• 基于两两对象距离的方法\n",
    "\n",
    "• 计算组内所有对象两两之间的邻近度（如欧几里得距离、曼哈顿距离等）。对于一个包含n个对象的集合，会得到n(n - 1)/2个距离值。然后可以通过一些统计量来衡量整体的邻近度，比如平均距离。如果平均距离较小，说明这组对象整体上比较邻近。例如，在分析一组文档的相似性时，通过计算每两篇文档之间的词向量距离，然后取平均值来表示这组文档的邻近度，用于文本聚类等任务。\n",
    "\n",
    "### (b)欧几里得空间中两个点集之间的距离定义\n",
    "\n",
    "• 豪斯多夫距离（Hausdorff Distance）：设A和B是欧几里得空间中的两个点集。豪斯多夫距离定义为d_H(A,B)=\\max\\{d(A,B),d(B,A)\\}，其中d(A,B)=\\sup_{a\\in A}\\inf_{b\\in B}\\left\\lVert a - b\\right\\rVert，\\left\\lVert\\cdot\\right\\rVert是欧几里得范数（距离）。简单来说，d(A,B)是A中的点到B的最短距离的最大值，d(B,A)反之。例如，在图像识别中，当比较两个图像中物体形状（用点集表示）时，豪斯多夫距离可以衡量它们的差异程度，距离越小，形状越相似。\n",
    "\n",
    "• 平均距离法：计算点集A中的每个点到点集B中所有点距离的平均值，再加上点集B中的每个点到点集A中所有点距离的平均值。这种方法相对简单直观，能在一定程度上反映两个点集之间的距离关系，在一些数据挖掘任务如空间数据分析中，用于衡量两个空间区域（用点集表示）的分离程度。\n",
    "\n",
    "### (c)两个数据对象集之间的邻近度定义\n",
    "\n",
    "• 最小距离法：对于两个数据对象集A和B，找到A中任意一个对象与B中任意一个对象之间的最小距离作为两个集合的邻近度。在数据挖掘的分类任务中，如果两个类别对应的数据集之间的最小距离很大，可能表示这两个类别很好区分。例如，在基于特征向量的疾病诊断分类中，健康人群和患病人群的两个数据集合之间的最小距离可以帮助判断分类边界是否清晰。\n",
    "\n",
    "• 基于相似度函数的方法：定义一个相似度函数S(A,B)来衡量两个集合之间的邻近度。例如，可以基于集合的交集和并集的大小来定义相似度，如Jaccard相似度：S(A,B)=\\frac{\\vert A\\cap B\\vert}{\\vert A\\cup B\\vert}。在文本挖掘中，当A和B是两个文档集合时，通过计算它们的Jaccard相似度来衡量文本内容的邻近度，用于文档分类、信息检索等任务。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f1ba7793",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
